package be.ipl.diavolo.uccImpl;

import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import be.ipl.diavolo.dao.PartieDao;
import be.ipl.diavolo.dao.TourDao;
import be.ipl.diavolo.domaine.Action;
import be.ipl.diavolo.domaine.Action.Diablotin;
import be.ipl.diavolo.domaine.De;
import be.ipl.diavolo.domaine.Joueur;
import be.ipl.diavolo.domaine.Partie;
import be.ipl.diavolo.domaine.Tour;
import be.ipl.diavolo.domaine.Tour.Ordre;
import be.ipl.diavolo.ucc.GestionTour;

@Stateless
public class GestionTourImpl implements GestionTour {

	@EJB
	TourDao tourDao;

	@EJB
	PartieDao partieDao;

	@Override
	public boolean lancerDes(Tour tour) {
		tour = tourDao.chargerDesLances(tour);
		tour.lancerDes();
		tourDao.mettreAJour(tour);
		return true;
	}

	@Override
	public List<De> listerDes(Tour tour) {
		tour = tourDao.chargerDesLances(tour);
		return tour.getDesLances();
	}

	@Override
	public boolean prendreDiablotin(Partie partie, Tour tour, Joueur joueur,
			Diablotin diablotin) {
		tour = tourDao.chargerActions(tour);
		partie = partieDao.chargerJoueurs(partie);

		int nbrGemmes = partie.getGemmes(joueur);

		Action action = new Action(nbrGemmes, diablotin);
		return tour.effectuerAction(partie, joueur, action);
	}

	@Override
	public Tour rechercherTour(Partie partie, int numero) {
		return tourDao.rechercherTour(partie.getId(), numero);
	}

	@Override
	public Map<Joueur, Action> recupererActions(Tour tour) {
		tour = tourDao.rechercher(tour.getId());
		tour = tourDao.chargerDesLances(tour);
		tour = tourDao.chargerActions(tour);
		return tour.getActions();
	}

	@Override
	public Ordre recupererDeOrdre(Tour tour) {
		tour = tourDao.rechercher(tour.getId());
		return tour.getOrdre();
	}
}
